package com.yunfei.api.v2.service;
import com.yunfei.api.v2.common.YunHeTongApiContant;
import com.yunfei.api.v2.param.LongTokenParam;
import com.yunfei.api.v2.param.addSigerParam.AddSignerJsonParam;
import com.yunfei.api.v2.param.addSigerParam.Signers;
import com.yunfei.bo.result.ResultModel;
import com.yunfei.enums.ResultStatus;
import com.yunfei.mapper.aiiidb.HeTongSignInfoMapper;
import com.yunfei.utils.http.JsonParamHttpUtil;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description:添加签署者
* @Author: zhengyunfei
* @Date: 2019/8/9
* @time:10:48
*/
@Service
public class AddSignerService {
    @Autowired
    private Environment env;
    @Autowired
    private GetLongTokenService getLongTokenService;
    @Autowired
    private MandatorIdService mandatorIdService;
    @Autowired
    private HeTongSignInfoMapper heTongSignInfoMapper;
    /**
    * @Description: 根据证件号码查询signerId
    * @Author: zhengyunfei
     * @param  contractId 合同id
     * @param  cCustNo 客户编号
     * @param  mobile 登录的手机号
     * @param  projId 营销项目编号
    * @Date: 2019/8/15
    * @time:16:26
    */
    public ResultModel addSigner(String contractId,String cCustNo,String projId,String mobile){
        ResultModel resultModel=new ResultModel();
        try{
                AddSignerJsonParam addSignerJsonParam=new AddSignerJsonParam();
                String defaultParam="0";
                String defaultOne="1";
                addSignerJsonParam.setIdType(defaultParam);//参数类型：0 合同 ID，1 合同自定义编号
                addSignerJsonParam.setIdContent(contractId);//ID内容
                //根据营销项目编号，获取管理人ID
                String crmMagerId=mandatorIdService.getMandatorId(projId);
                //查询签署者信息
                Map<String,Object> signerParam=new HashMap<>();
                signerParam.put("cCustNo",cCustNo);
                signerParam.put("crmMagerId",crmMagerId);
                signerParam.put("mobile",mobile);
                List<Signers> signersList=heTongSignInfoMapper.querySignerInfo(signerParam);
                for(int i=0;i<signersList.size();i++){
                    Signers signers=signersList.get(i);
                    String positionContent=signers.getPositionContent();
                    signers.setSignPositionType(defaultParam);//签署的定位方式：0=关键字定位，1=签名占位符定位，2=签署坐标
                    signers.setSignValidateType(defaultParam);//签署验证方式：0=不校验，1=短信验证
                    //判断第一个为指定印章，其他2个为每次绘制
                    if(positionContent.contains("投资人签字")){
                        signers.setSignMode(defaultOne);//1=每次绘制
                    }else{
                        signers.setSignMode(defaultParam);//0=指定印章
                    }
                    signers.setSignForm(defaultParam);//签署形态，0=JS 集成页面(默认)，1=独立 H5 页面
                }
                addSignerJsonParam.setSigners(signersList);
                LongTokenParam longTokenParam=new LongTokenParam();
                JSONObject jsonObject=JSONObject.fromObject(addSignerJsonParam);
                String jsonParam=jsonObject.toString();
                System.out.println("添加签署者接口参数=========================="+jsonParam);
                String token=getLongTokenService.getLongToken(longTokenParam);
                JSONObject result= JsonParamHttpUtil.post(token, YunHeTongApiContant.ADD_SIGNER_API,jsonParam);
                System.out.println("添加签署者接口返回结果======"+result.toString());
                resultModel.setData(result);
                resultModel.setCode(ResultStatus.SUCCESS.getCode());
                resultModel.setMessage(ResultStatus.SUCCESS.getMessage());

        }catch (Exception e){
            e.printStackTrace();
        }
        return resultModel;
    }

    /**
     * @Description: 作废协议添加签署者
     * @Author: zhengyunfei
     * @param  contractId 合同id
     * @Date: 2019/8/15
     * @time:16:26
     */
    public ResultModel addSignerForCreateZuoFeiXieYi(String contractId,String cReserveNo){
        ResultModel resultModel=new ResultModel();
        try{
            AddSignerJsonParam addSignerJsonParam=new AddSignerJsonParam();
            String defaultParam="0";
            String defaultOne="1";
            addSignerJsonParam.setIdType(defaultParam);//参数类型：0 合同 ID，1 合同自定义编号
            addSignerJsonParam.setIdContent(contractId);//ID内容
            //查询生成作废协议签署者信息
            Map<String,Object> signerParam=new HashMap<>();
            signerParam.put("cReserveNo",cReserveNo);
            List<Signers> signersList=heTongSignInfoMapper.querySignerInfoForCreateZuoFeiXieYi(signerParam);
            for(int i=0;i<signersList.size();i++){
                Signers signers=signersList.get(i);
                String positionContent=signers.getPositionContent();
                signers.setSignPositionType(defaultParam);//签署的定位方式：0=关键字定位，1=签名占位符定位，2=签署坐标
                signers.setSignValidateType(defaultParam);//签署验证方式：0=不校验，1=短信验证
                //判断第一个为指定印章，其他2个为每次绘制
                if(positionContent.contains("投资人签字")){
                    signers.setSignMode(defaultOne);//1=每次绘制
                }else{
                    signers.setSignMode(defaultParam);//0=指定印章
                }
                signers.setSignForm(defaultParam);//签署形态，0=JS 集成页面(默认)，1=独立 H5 页面
            }
            addSignerJsonParam.setSigners(signersList);
            LongTokenParam longTokenParam=new LongTokenParam();
            JSONObject jsonObject=JSONObject.fromObject(addSignerJsonParam);
            String jsonParam=jsonObject.toString();
            System.out.println("生成作废协议添加签署者接口参数=========================="+jsonParam);
            String token=getLongTokenService.getLongToken(longTokenParam);
            JSONObject result= JsonParamHttpUtil.post(token, YunHeTongApiContant.ADD_SIGNER_API,jsonParam);
            System.out.println("生成作废协议添加签署者接口返回结果======"+result.toString());
            resultModel.setData(result);
            resultModel.setCode(ResultStatus.SUCCESS.getCode());
            resultModel.setMessage(ResultStatus.SUCCESS.getMessage());

        }catch (Exception e){
            e.printStackTrace();
        }
        return resultModel;
    }

}
